package com.zoo.boot.utils;


import cn.hutool.core.bean.BeanUtil;
import com.zoo.boot.dto.MenuDto;
import com.zoo.boot.dto.MenuIndexDto;
import com.zoo.boot.model.LMenu;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author: WangB
 * @Date: 2021/6/17
 */
public class TreeUtils {

    public static List<MenuDto> menutree(List<MenuDto> listByRoleId, List<MenuDto> menuDtos ){
        //所有菜单 的菜单号
        List<Integer> collect = listByRoleId.stream().map(MenuDto::getId).collect(Collectors.toList());
        //当前角色的菜单号
        List<Integer> collect1 = menuDtos.stream().map(MenuDto::getId).collect(Collectors.toList());
        // 遍历list2
        for (Integer item : collect) {
            // 如果存在这个数
            if (collect1.contains(item)) {
                MenuDto menuDto = new MenuDto();
                int i = collect1.indexOf(item);
                menuDto = menuDtos.get(i);
                menuDto.setCheckArr("1");
                menuDtos.set(i,menuDto);
            }
        }
        return menuDtos;
    }

    public static  MenuIndexDto convertMenuIndexDto(LMenu menu){
        MenuIndexDto menuIndexDto = new MenuIndexDto();
        BeanUtil.copyProperties(menu,menuIndexDto,true);
        menuIndexDto.setId(menu.getMenuId());
        menuIndexDto.setTitle(menu.getMenuName());
        menuIndexDto.setHref(menu.getUrl());
        return  menuIndexDto;
    }



    // 第一步 将一级菜单筛选出来
    // 第二步 将二级菜单归类到一级菜单目录下
    // 第三步 将分好的层级菜单列表返回给前端即可
    public  static  List<MenuIndexDto> parseMenu(List<MenuIndexDto> menus){
          List<MenuIndexDto>  level_1 = new ArrayList<>();
          List<MenuIndexDto>  level_1_2 = new ArrayList<>();
          for(MenuIndexDto  dto : menus){
              if(dto.getParentId() == 0){
                  level_1.add(dto);
              }else{
                  level_1_2.add(dto);
              }
          }

          for(MenuIndexDto  dto:level_1){
              parseLevelMenu(dto,level_1_2);
          }
        return  level_1;
    }




    public  static  void  parseLevelMenu(MenuIndexDto dto,List<MenuIndexDto> level_1_2){
        List<MenuIndexDto>  level_2 =new ArrayList<>();
        for(MenuIndexDto dto_2:level_1_2){
            if(dto.getId()==dto_2.getParentId()){
                level_2.add(dto_2);
            }
        }
        dto.setChildren(level_2);
    }

}
